package com.tutos.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;


@Entity
@NamedQueries({
	@NamedQuery(name="getAllTutorias", query="SELECT t FROM Tutoria t"),
	@NamedQuery(name="getTutoriasMateria", query="SELECT t FROM Tutoria t JOIN t.materia m WHERE m.id=:id"),
	@NamedQuery(name="getTutoriasMonitor", query="SELECT new com.tutos.model.Tutoria(t.id, t.costo, t.informacion, t.calificacion, ma.id, m.id) FROM Tutoria t JOIN t.monitor m JOIN t.materia ma WHERE m.id=:id"),
	@NamedQuery(name="getTutoriasMateriaNombre", query="SELECT new com.tutos.model.Tutoria(t.id, t.costo, t.informacion, t.calificacion, ma.id, m.id) FROM Tutoria t JOIN t.materia ma JOIN t.monitor m WHERE ma.nombre like(:nombre)"),
	@NamedQuery(name="getTutoriasMonitorNombre", query="SELECT new com.tutos.model.Tutoria(t.id, t.costo, t.informacion, t.calificacion, ma.id, m.id) FROM Tutoria t JOIN t.monitor m JOIN t.materia ma WHERE m.nombre like(:nombre)")
})
public class Tutoria implements Serializable{

	private static final long serialVersionUID = 1L;
	
	
	public Tutoria(){}
	
	public Tutoria(Long id, Integer costo, String informacion, Calificacion calificacion, Long materiaId, Long monitorId){
		this.id=id;
		this.costo=costo;
		this.informacion=informacion;
		this.calificacion=calificacion;
		
		Materia materia = new Materia();
		materia.setId(materiaId);
		
		Monitor monitor = new Monitor();
		monitor.setId(monitorId);
		
		this.monitor = monitor;
		this.materia = materia;
	}
	
	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name ="costo")	
	private Integer costo;
	
	@Column(name ="informacion")
	private String informacion;
	
	@Column(name="calificacion")
	private Calificacion calificacion;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "monitor")
	private Monitor monitor;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "materia")
	private Materia materia;

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Integer getCosto() {
		return costo;
	}
	public void setCosto(Integer costo) {
		this.costo = costo;
	}
	public String getInformacion() {
		return informacion;
	}
	public void setInformacion(String informacion) {
		this.informacion = informacion;
	}
	public Calificacion getCalificacion() {
		return calificacion;
	}
	public void setCalificacion(Calificacion calificacion) {
		this.calificacion = calificacion;
	}
	public Monitor getMonitor() {
		return monitor;
	}
	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}
	
	public Materia getMateria() {
		return materia;
	}
	public void setMateria(Materia materia) {
		this.materia = materia;
	}
	
}
